

<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
  <meta charset="utf-8" />
  <meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  
  <title>Bucket Notifications &mdash; Ceph Documentation</title>
  

  
  <link rel="stylesheet" href="../../_static/ceph.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/ceph.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/graphviz.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" />

  
  

  
  

  

  
  <!--[if lt IE 9]>
    <script src="../../_static/js/html5shiv.min.js"></script>
  <![endif]-->
  
    
      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
        <script src="../../_static/jquery.js"></script>
        <script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
        <script src="../../_static/doctools.js"></script>
        <script src="../../_static/sphinx_highlight.js"></script>
    
    <script type="text/javascript" src="../../_static/js/theme.js"></script>

    
    <link rel="index" title="Index" href="../../genindex/" />
    <link rel="search" title="Search" href="../../search/" />
    <link rel="next" title="S3 桶通知的兼容性" href="../s3-notification-compatibility/" />
    <link rel="prev" title="Archive 同步模块" href="../archive-sync-module/" /> 
</head>

<body class="wy-body-for-nav">

   
  <header class="top-bar">
    <div role="navigation" aria-label="Page navigation">
  <ul class="wy-breadcrumbs">
      <li><a href="../../" class="icon icon-home" aria-label="Home"></a></li>
          <li class="breadcrumb-item"><a href="../">Ceph 对象网关</a></li>
      <li class="breadcrumb-item active">Bucket Notifications</li>
      <li class="wy-breadcrumbs-aside">
            <a href="../../_sources/radosgw/notifications.rst.txt" rel="nofollow"> View page source</a>
      </li>
  </ul>
  <hr/>
</div>
  </header>
  <div class="wy-grid-for-nav">
    
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search"  style="background: #eee" >
          

          
            <a href="../../" class="icon icon-home"> Ceph
          

          
          </a>

          

          
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../../search/" method="get">
    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>

          
        </div>

        
        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
          
            
            
              
            
            
              <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../start/">Ceph 简介</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../install/">安装 Ceph</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../cephadm/">Cephadm</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../rados/">Ceph 存储集群</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../cephfs/">Ceph 文件系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../rbd/">Ceph 块设备</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../">Ceph 对象网关</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../frontends/">HTTP 前端</a></li>
<li class="toctree-l2"><a class="reference internal" href="../multisite/">多站配置</a></li>
<li class="toctree-l2"><a class="reference internal" href="../zone-features/">域的功能</a></li>
<li class="toctree-l2"><a class="reference internal" href="../placement/">存储池归置与存储类</a></li>
<li class="toctree-l2"><a class="reference internal" href="../multisite-sync-policy/">多站同步策略配置</a></li>
<li class="toctree-l2"><a class="reference internal" href="../pools/">存储池的配置</a></li>
<li class="toctree-l2"><a class="reference internal" href="../config-ref/">配置参考</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/">管理指南</a></li>
<li class="toctree-l2"><a class="reference internal" href="../account/">用户账户</a></li>
<li class="toctree-l2"><a class="reference internal" href="../s3/">S3 API</a></li>
<li class="toctree-l2"><a class="reference internal" href="../iam/">IAM API</a></li>
<li class="toctree-l2"><a class="reference internal" href="../rgw-cache/">数据缓存和 CDN</a></li>
<li class="toctree-l2"><a class="reference internal" href="../swift/">Swift API</a></li>
<li class="toctree-l2"><a class="reference internal" href="../adminops/">管理操作 API</a></li>
<li class="toctree-l2"><a class="reference internal" href="../api/">Python 接口</a></li>
<li class="toctree-l2"><a class="reference internal" href="../nfs/">通过 NFS 导出</a></li>
<li class="toctree-l2"><a class="reference internal" href="../keystone/">与 OpenStack Keystone 对接</a></li>
<li class="toctree-l2"><a class="reference internal" href="../barbican/">与 OpenStack Barbican 对接</a></li>
<li class="toctree-l2"><a class="reference internal" href="../vault/">与 HashiCorp Vault 对接</a></li>
<li class="toctree-l2"><a class="reference internal" href="../kmip/">与 KMIP 对接</a></li>
<li class="toctree-l2"><a class="reference internal" href="../opa/">与 Open Policy Agent 对接</a></li>
<li class="toctree-l2"><a class="reference internal" href="../multitenancy/">多租户</a></li>
<li class="toctree-l2"><a class="reference internal" href="../compression/">压缩</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ldap-auth/">LDAP 认证</a></li>
<li class="toctree-l2"><a class="reference internal" href="../encryption/">服务器端加密</a></li>
<li class="toctree-l2"><a class="reference internal" href="../bucketpolicy/">桶策略</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dynamicresharding/">动态的桶索引重分片</a></li>
<li class="toctree-l2"><a class="reference internal" href="../mfa/">多因子认证</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sync-modules/">同步模块</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Bucket Notifications</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../s3-notification-compatibility/">S3 Bucket Notification Compatibility</a></li>
<li class="toctree-l3"><a class="reference internal" href="#notification-reliability">Notification Reliability</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#synchronous-notifications">Synchronous Notifications</a></li>
<li class="toctree-l4"><a class="reference internal" href="#asynchronous-notifications">Asynchronous Notifications</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#topic-management-via-cli">Topic Management via CLI</a></li>
<li class="toctree-l3"><a class="reference internal" href="#notification-performance-statistics">Notification Performance Statistics</a></li>
<li class="toctree-l3"><a class="reference internal" href="#bucket-notification-rest-api">Bucket Notification REST API</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#topics">Topics</a></li>
<li class="toctree-l4"><a class="reference internal" href="#notifications">Notifications</a></li>
<li class="toctree-l4"><a class="reference internal" href="#events">Events</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../layout/">RADOS 中的数据布局</a></li>
<li class="toctree-l2"><a class="reference internal" href="../STS/">STS</a></li>
<li class="toctree-l2"><a class="reference internal" href="../STSLite/">STS Lite</a></li>
<li class="toctree-l2"><a class="reference internal" href="../keycloak/">Keycloak</a></li>
<li class="toctree-l2"><a class="reference internal" href="../session-tags/">Session Tags</a></li>
<li class="toctree-l2"><a class="reference internal" href="../role/">Role</a></li>
<li class="toctree-l2"><a class="reference internal" href="../orphans/">Orphan List and Associated Tooliing</a></li>
<li class="toctree-l2"><a class="reference internal" href="../oidc/">OpenID Connect Provider</a></li>
<li class="toctree-l2"><a class="reference internal" href="../troubleshooting/">故障排除</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../man/8/radosgw/">radosgw 手册页</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../man/8/radosgw-admin/">radosgw-admin 手册页</a></li>
<li class="toctree-l2"><a class="reference internal" href="../qat-accel/">使用 QAT 为加密和压缩提速</a></li>
<li class="toctree-l2"><a class="reference internal" href="../s3select/">S3-select</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lua-scripting/">Lua Scripting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../d3n_datacache/">D3N Data Cache</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cloud-transition/">Cloud Transition</a></li>
<li class="toctree-l2"><a class="reference internal" href="../metrics/">Metrics</a></li>
<li class="toctree-l2"><a class="reference internal" href="../uadk-accel/">UADK Acceleration for Compression</a></li>
<li class="toctree-l2"><a class="reference internal" href="../bucket_logging/">桶的日志记录</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../mgr/">Ceph 管理器守护进程</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../mgr/dashboard/">Ceph 仪表盘</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../monitoring/">监控概览</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api/">API 文档</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../architecture/">体系结构</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev/developer_guide/">开发者指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev/internals/">Ceph 内幕</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../governance/">项目管理</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../foundation/">Ceph 基金会</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../ceph-volume/">ceph-volume</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../releases/general/">Ceph 版本（总目录）</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../releases/">Ceph 版本（索引）</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../security/">Security</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../hardware-monitoring/">硬件监控</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../glossary/">Ceph 术语</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../jaegertracing/">Tracing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../translation_cn/">中文版翻译资源</a></li>
</ul>

            
          
        </div>
        
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" aria-label="top navigation">
        
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="../../">Ceph</a>
        
      </nav>


      <div class="wy-nav-content">
        
        <div class="rst-content">
        
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
            
<div id="dev-warning" class="admonition note">
  <p class="first admonition-title">Notice</p>
  <p class="last">This document is for a development version of Ceph.</p>
</div>
  <div id="docubetter" align="right" style="padding: 5px; font-weight: bold;">
    <a href="https://pad.ceph.com/p/Report_Documentation_Bugs">Report a Documentation Bug</a>
  </div>

  
  <section id="bucket-notifications">
<h1><a class="toc-backref" href="#id5" role="doc-backlink">Bucket Notifications</a><a class="headerlink" href="#bucket-notifications" title="Permalink to this heading"></a></h1>
<div class="versionadded">
<p><span class="versionmodified added">New in version Nautilus.</span></p>
</div>
<div class="versionchanged">
<p><span class="versionmodified changed">Changed in version Squid: </span>A new “v2” format for Topic and Notification metadata can be enabled with
the <a class="reference internal" href="../zone-features/#feature-notification-v2"><span class="std std-ref">notification_v2</span></a> zone feature.
Enabling this feature after an upgrade from an older version will trigger
migration of the existing Topic and Notification metadata.
In a greenfield deployment, the new format will be used.
The new format allows for the data to be synced between zones in the zonegroup.</p>
</div>
<nav class="contents" id="contents">
<p class="topic-title">Contents</p>
<ul class="simple">
<li><p><a class="reference internal" href="#bucket-notifications" id="id5">Bucket Notifications</a></p>
<ul>
<li><p><a class="reference internal" href="#notification-reliability" id="id6">Notification Reliability</a></p>
<ul>
<li><p><a class="reference internal" href="#synchronous-notifications" id="id7">Synchronous Notifications</a></p></li>
<li><p><a class="reference internal" href="#asynchronous-notifications" id="id8">Asynchronous Notifications</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#topic-management-via-cli" id="id9">Topic Management via CLI</a></p></li>
<li><p><a class="reference internal" href="#notification-performance-statistics" id="id10">Notification Performance Statistics</a></p></li>
<li><p><a class="reference internal" href="#bucket-notification-rest-api" id="id11">Bucket Notification REST API</a></p>
<ul>
<li><p><a class="reference internal" href="#topics" id="id12">Topics</a></p>
<ul>
<li><p><a class="reference internal" href="#create-a-topic" id="id13">Create a Topic</a></p></li>
<li><p><a class="reference internal" href="#get-topic-attributes" id="id14">Get Topic Attributes</a></p></li>
<li><p><a class="reference internal" href="#get-topic-information" id="id15">Get Topic Information</a></p></li>
<li><p><a class="reference internal" href="#delete-topic" id="id16">Delete Topic</a></p></li>
<li><p><a class="reference internal" href="#list-topics" id="id17">List Topics</a></p></li>
<li><p><a class="reference internal" href="#set-topic-attributes" id="id18">Set Topic Attributes</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#notifications" id="id19">Notifications</a></p></li>
<li><p><a class="reference internal" href="#events" id="id20">Events</a></p></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
<p>Bucket notifications provide a mechanism for sending information out of radosgw
when certain events happen on the bucket. Notifications can be sent to HTTP
endpoints, AMQP0.9.1 endpoints, and Kafka endpoints.</p>
<p>A user can create topics. A topic entity is defined by its name and is “per
tenant”. A user can associate its topics (via notification configuration) only
with buckets it owns.</p>
<p>A notification entity must be created in order to send event notifications for
a specific bucket. A notification entity can be created either for a subset
of event types or for all “Removed” and “Created” event types (which is the default). The
notification may also filter out events based on matches of the prefixes and
suffixes of (1) the keys, (2) the metadata attributes attached to the object,
or (3) the object tags. Regular-expression matching can also be used on these
to create filters. There can be multiple notifications for any specific topic,
and the same topic can used for multiple notifications.</p>
<p>REST API has been defined so as to provide configuration and control interfaces
for the bucket notification mechanism.</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../s3-notification-compatibility/">S3 Bucket Notification Compatibility</a></li>
</ul>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>To enable bucket notifications API, the <cite>rgw_enable_apis</cite> configuration parameter should contain: “notifications”.</p>
</div>
<section id="notification-reliability">
<h2><a class="toc-backref" href="#id6" role="doc-backlink">Notification Reliability</a><a class="headerlink" href="#notification-reliability" title="Permalink to this heading"></a></h2>
<p>Notifications can be sent synchronously or asynchronously. This section
describes the latency and reliability that you should expect for synchronous
and asynchronous notifications.</p>
<section id="synchronous-notifications">
<h3><a class="toc-backref" href="#id7" role="doc-backlink">Synchronous Notifications</a><a class="headerlink" href="#synchronous-notifications" title="Permalink to this heading"></a></h3>
<p>Notifications can be sent synchronously, as part of the operation that
triggered them. In this mode, the operation is acknowledged (acked) only after
the notification is sent to the topic’s configured endpoint. This means that
the round trip time of the notification (the time it takes to send the
notification to the topic’s endpoint plus the time it takes to receive the
acknowledgement) is added to the latency of the operation itself.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The original triggering operation is considered successful even if
the notification fails with an error, cannot be delivered, or times out.</p>
</div>
</section>
<section id="asynchronous-notifications">
<h3><a class="toc-backref" href="#id8" role="doc-backlink">Asynchronous Notifications</a><a class="headerlink" href="#asynchronous-notifications" title="Permalink to this heading"></a></h3>
<p>Notifications can be sent asynchronously. They are committed into persistent
storage and then asynchronously sent to the topic’s configured endpoint.
The notification will be committed to persistent storage only if the triggering
operation was successful.
In this case, the only latency added to the original operation is the latency
added when the notification is committed to persistent storage.
If the endpoint of the topic to which the notification is sent is not available for a long
period of time, the persistent storage allocated for this topic will eventually fill up.
When this happens the triggering operations will fail with <code class="docutils literal notranslate"><span class="pre">503</span> <span class="pre">Service</span> <span class="pre">Unavailable</span></code>,
which tells the client that it may retry later.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If the notification fails with an error, cannot be delivered, or
times out, it is retried until it is successfully acknowledged.
You can control its retry with time_to_live/max_retries to have a time/retry limit and
control the retry frequency with retry_sleep_duration</p>
</div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>To minimize the latency added by asynchronous notification, we
recommended placing the “log” pool on fast media.</p>
</div>
</section>
</section>
<section id="topic-management-via-cli">
<h2><a class="toc-backref" href="#id9" role="doc-backlink">Topic Management via CLI</a><a class="headerlink" href="#topic-management-via-cli" title="Permalink to this heading"></a></h2>
<p>Fetch the configuration of all topics associated with tenants by running the
following command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><style type="text/css">
span.prompt1:before {
  content: "# ";
}
</style><span class="prompt1">radosgw-admin<span class="w"> </span>topic<span class="w"> </span>list<span class="w"> </span><span class="o">[</span>--tenant<span class="o">={</span>tenant<span class="o">}]</span><span class="w">  </span><span class="o">[</span>--uid<span class="o">={</span>user<span class="o">}]</span></span>
</pre></div></div><p>Fetch the configuration of a specific topic by running the following command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">radosgw-admin<span class="w"> </span>topic<span class="w"> </span>get<span class="w"> </span>--topic<span class="o">={</span>topic-name<span class="o">}</span><span class="w"> </span><span class="o">[</span>--tenant<span class="o">={</span>tenant<span class="o">}]</span></span>
</pre></div></div><p>Remove a topic by running the following command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">radosgw-admin<span class="w"> </span>topic<span class="w"> </span>rm<span class="w"> </span>--topic<span class="o">={</span>topic-name<span class="o">}</span><span class="w"> </span><span class="o">[</span>--tenant<span class="o">={</span>tenant<span class="o">}]</span></span>
</pre></div></div><p>Fetch persistent topic stats (i.e. reservations, entries and size) by running the following command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">radosgw-admin<span class="w"> </span>topic<span class="w"> </span>stats<span class="w"> </span>--topic<span class="o">={</span>topic-name<span class="o">}</span><span class="w"> </span><span class="o">[</span>--tenant<span class="o">={</span>tenant<span class="o">}]</span></span>
</pre></div></div><p>Dump (in JSON format) all pending bucket notifications of a persistent topic by running the following command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span class="prompt1">radosgw-admin<span class="w"> </span>topic<span class="w"> </span>dump<span class="w"> </span>--topic<span class="o">={</span>topic-name<span class="o">}</span><span class="w"> </span><span class="o">[</span>--tenant<span class="o">={</span>tenant<span class="o">}]</span><span class="w"> </span><span class="o">[</span>--max-entries<span class="o">={</span>max-entries<span class="o">}]</span></span>
</pre></div></div></section>
<section id="notification-performance-statistics">
<h2><a class="toc-backref" href="#id10" role="doc-backlink">Notification Performance Statistics</a><a class="headerlink" href="#notification-performance-statistics" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pubsub_event_triggered</span></code>: a running counter of events that have at least one topic associated with them</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pubsub_event_lost</span></code>: a running counter of events that had topics associated with them, but that were not pushed to any of the endpoints</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pubsub_push_ok</span></code>: a running counter, for all notifications, of events successfully pushed to their endpoints</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pubsub_push_fail</span></code>: a running counter, for all notifications, of events that failed to be pushed to their endpoints</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">pubsub_push_pending</span></code>: the gauge value of events pushed to an endpoint but not acked or nacked yet</p></li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><code class="docutils literal notranslate"><span class="pre">pubsub_event_triggered</span></code> and <code class="docutils literal notranslate"><span class="pre">pubsub_event_lost</span></code> are incremented per
event on each notification, but <code class="docutils literal notranslate"><span class="pre">pubsub_push_ok</span></code> and <code class="docutils literal notranslate"><span class="pre">pubsub_push_fail</span></code>
are incremented per push action on each notification.</p>
</div>
</section>
<section id="bucket-notification-rest-api">
<h2><a class="toc-backref" href="#id11" role="doc-backlink">Bucket Notification REST API</a><a class="headerlink" href="#bucket-notification-rest-api" title="Permalink to this heading"></a></h2>
<section id="topics">
<h3><a class="toc-backref" href="#id12" role="doc-backlink">Topics</a><a class="headerlink" href="#topics" title="Permalink to this heading"></a></h3>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>In all topic actions, the parameters are URL-encoded and sent in the
message body using this content type:
<code class="docutils literal notranslate"><span class="pre">application/x-www-form-urlencoded</span></code>.</p>
</div>
<section id="create-a-topic">
<span id="id1"></span><h4><a class="toc-backref" href="#id13" role="doc-backlink">Create a Topic</a><a class="headerlink" href="#create-a-topic" title="Permalink to this heading"></a></h4>
<p>This creates a new topic. Provide the topic with push endpoint parameters,
which will be used later when a notification is created. A response is
generated. A successful response includes the topic’s <a class="reference external" href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">ARN</a>
(the “Amazon Resource Name”, a unique identifier used to reference the topic).
To update a topic, use the same command that you used to create it (but when
updating, use the name of an existing topic and different endpoint values).</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Any notification already associated with the topic must be re-created
in order for the topic to update.</p>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">CreateTopic</span>
<span class="o">&amp;</span><span class="n">Name</span><span class="o">=&lt;</span><span class="n">topic</span><span class="o">-</span><span class="n">name</span><span class="o">&gt;</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.1</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">amqp</span><span class="o">-</span><span class="n">exchange</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.1</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">exchange</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.2</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">amqp</span><span class="o">-</span><span class="n">ack</span><span class="o">-</span><span class="n">level</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.2</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">none</span><span class="o">|</span><span class="n">broker</span><span class="o">|</span><span class="n">routable</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.3</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">verify</span><span class="o">-</span><span class="n">ssl</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.3</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">true</span><span class="o">|</span><span class="n">false</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.4</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">kafka</span><span class="o">-</span><span class="n">ack</span><span class="o">-</span><span class="n">level</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.4</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">none</span><span class="o">|</span><span class="n">broker</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.5</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">use</span><span class="o">-</span><span class="n">ssl</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.5</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">true</span><span class="o">|</span><span class="n">false</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.6</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">ca</span><span class="o">-</span><span class="n">location</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.6</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">file</span> <span class="n">path</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.7</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">OpaqueData</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.7</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">opaque</span> <span class="n">data</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.8</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">push</span><span class="o">-</span><span class="n">endpoint</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.8</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">endpoint</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.9</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">persistent</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.9</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">true</span><span class="o">|</span><span class="n">false</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.10</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">cloudevents</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.10</span><span class="o">.</span><span class="n">value</span><span class="o">=</span><span class="n">true</span><span class="o">|</span><span class="n">false</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.11</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">mechanism</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.11</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">mechanism</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.12</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">time_to_live</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.12</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">seconds</span> <span class="n">to</span> <span class="n">live</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.13</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">max_retries</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.13</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">retries</span> <span class="n">number</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.14</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">retry_sleep_duration</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.14</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">sleep</span> <span class="n">seconds</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.15</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">Policy</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.15</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">policy</span><span class="o">-</span><span class="n">JSON</span><span class="o">-</span><span class="n">string</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.16</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">user</span><span class="o">-</span><span class="n">name</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.16</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">user</span><span class="o">-</span><span class="n">name</span><span class="o">-</span><span class="n">string</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.17</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">password</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.17</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">password</span><span class="o">-</span><span class="n">string</span><span class="o">&gt;</span><span class="p">]</span>
<span class="p">[</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.18</span><span class="o">.</span><span class="n">key</span><span class="o">=</span><span class="n">kafka</span><span class="o">-</span><span class="n">brokers</span><span class="o">&amp;</span><span class="n">Attributes</span><span class="o">.</span><span class="n">entry</span><span class="mf">.18</span><span class="o">.</span><span class="n">value</span><span class="o">=&lt;</span><span class="n">kafka</span><span class="o">-</span><span class="n">broker</span><span class="o">-</span><span class="nb">list</span><span class="o">&gt;</span><span class="p">]</span>
</pre></div>
</div>
<p>Request parameters:</p>
<ul>
<li><p>push-endpoint: This is the URI of an endpoint to send push notifications to.</p></li>
<li><p>OpaqueData: Opaque data is set in the topic configuration and added to all
notifications that are triggered by the topic.</p></li>
<li><p>persistent: This indicates whether notifications to this endpoint are
persistent (=asynchronous) or not persistent. (This is “false” by default.)</p></li>
<li><p>time_to_live: This will limit the time (in seconds) to retain the notifications.
default value is taken from <cite>rgw_topic_persistency_time_to_live</cite>.
providing a value overrides the global value.
zero value means infinite time to live.</p></li>
<li><p>max_retries: This will limit the max retries before expiring notifications.
default value is taken from <cite>rgw_topic_persistency_max_retries</cite>.
providing a value overrides the global value.
zero value means infinite retries.</p></li>
<li><p>retry_sleep_duration: This will control the frequency of retrying the notifications.
default value is taken from <cite>rgw_topic_persistency_sleep_duration</cite>.
providing a value overrides the global value.
zero value mean there is no delay between retries.</p></li>
<li><p>Policy: This will control who can access the topic in addition to the owner of the topic.
The policy passed needs to be a JSON string similar to bucket policy.
For example, one can send a policy string as follows:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
  <span class="s2">&quot;Version&quot;</span><span class="p">:</span> <span class="s2">&quot;2012-10-17&quot;</span><span class="p">,</span>
  <span class="s2">&quot;Statement&quot;</span><span class="p">:</span> <span class="p">[{</span>
    <span class="s2">&quot;Effect&quot;</span><span class="p">:</span> <span class="s2">&quot;Allow&quot;</span><span class="p">,</span>
    <span class="s2">&quot;Principal&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;AWS&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;arn:aws:iam::usfolks:user/fred:subuser&quot;</span><span class="p">]},</span>
    <span class="s2">&quot;Action&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;sns:GetTopicAttributes&quot;</span><span class="p">,</span><span class="s2">&quot;sns:Publish&quot;</span><span class="p">],</span>
    <span class="s2">&quot;Resource&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;arn:aws:sns:default::mytopic&quot;</span><span class="p">],</span>
  <span class="p">}]</span>
<span class="p">}</span>
</pre></div>
</div>
<p>Currently, we support only the following actions:
- sns:GetTopicAttributes  To list or get existing topics
- sns:SetTopicAttributes  To set attributes for the existing topic
- sns:DeleteTopic         To delete the existing topic
- sns:Publish             To be able to create/subscribe notification on existing topic</p>
</li>
<li><p>HTTP endpoint</p></li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>URI: <code class="docutils literal notranslate"><span class="pre">http[s]://&lt;fqdn&gt;[:&lt;port]</span></code></p></li>
<li><p>port: This defaults to 80 for HTTP and 443 for HTTPS.</p></li>
<li><p>verify-ssl: This indicates whether the server certificate is validated by
the client. (This is “true” by default.)</p></li>
<li><p>cloudevents: This indicates whether the HTTP header should contain
attributes according to the <a class="reference external" href="https://github.com/cloudevents/spec/blob/main/cloudevents/adapters/aws-s3.md">S3 CloudEvents Spec</a>. (This is “false” by
default.)</p></li>
</ul>
</div></blockquote>
<ul class="simple">
<li><p>AMQP0.9.1 endpoint</p></li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>URI: <code class="docutils literal notranslate"><span class="pre">amqp[s]://[&lt;user&gt;:&lt;password&gt;&#64;]&lt;fqdn&gt;[:&lt;port&gt;][/&lt;vhost&gt;]</span></code></p></li>
<li><p>user/password: This defaults to “guest/guest”.</p></li>
<li><p>user/password: This must be provided only over HTTPS. Topic creation
requests will otherwise be rejected.</p></li>
<li><p>port: This defaults to 5672 for unencrypted connections and 5671 for
SSL-encrypted connections.</p></li>
<li><p>vhost: This defaults to “/”.</p></li>
<li><p>verify-ssl: This indicates whether the server certificate is validated by
the client. (This is “true” by default.)</p></li>
<li><p>If <code class="docutils literal notranslate"><span class="pre">ca-location</span></code> is provided and a secure connection is used, the
specified CA will be used to authenticate the broker. The default CA will
not be used.</p></li>
<li><p>amqp-exchange: The exchanges must exist and must be able to route messages
based on topics. This parameter is mandatory.</p></li>
<li><p>amqp-ack-level: No end2end acking is required. Messages may persist in the
broker before being delivered to their final destinations. Three ack methods
exist:</p></li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>“none”: The message is considered “delivered” if it is sent to the broker.</p></li>
<li><p>“broker”: The message is considered “delivered” if it is acked by the broker (default).</p></li>
<li><p>“routable”: The message is considered “delivered” if the broker can route to a consumer.</p></li>
</ul>
</div></blockquote>
</div></blockquote>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>The topic-name (see <a class="reference internal" href="#create-a-topic"><span class="std std-ref">Create a Topic</span></a>) is used for the
AMQP topic (“routing key” for a topic exchange).</p>
</div>
<ul class="simple">
<li><p>Kafka endpoint</p></li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>URI: <code class="docutils literal notranslate"><span class="pre">kafka://[&lt;user&gt;:&lt;password&gt;&#64;]&lt;fqdn&gt;[:&lt;port]</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">use-ssl</span></code>: If this is set to “true”, a secure connection is used to
connect to the broker. (This is “false” by default.)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ca-location</span></code>: If this is provided and a secure connection is used, the
specified CA will be used instead of the default CA to authenticate the
broker.</p></li>
<li><p>user/password: This should be provided over HTTPS. If not, the config parameter <cite>rgw_allow_notification_secrets_in_cleartext</cite> must be <cite>true</cite> in order to create topics.</p></li>
<li><p>user/password: This should be provided together with <code class="docutils literal notranslate"><span class="pre">use-ssl</span></code>. If not, the broker credentials will be sent over insecure transport.</p></li>
<li><p>mechanism: may be provided together with user/password (default: <code class="docutils literal notranslate"><span class="pre">PLAIN</span></code>). The supported SASL mechanisms are:</p></li>
<li><dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">user-name</span></code>: User name to use when connecting to the Kafka broker. If both this parameter and URI user are provided then this parameter overrides the URI user.</dt><dd><p>The same security considerations are in place for this parameter as are for user/password.</p>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">password</span></code>: Password to use when connecting to the Kafka broker. If both this parameter and URI password are provided then this parameter overrides the URI password.</dt><dd><p>The same security considerations are in place for this parameter as are for user/password.</p>
</dd>
</dl>
</li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>PLAIN</p></li>
<li><p>SCRAM-SHA-256</p></li>
<li><p>SCRAM-SHA-512</p></li>
<li><p>GSSAPI</p></li>
<li><p>OAUTHBEARER</p></li>
</ul>
</div></blockquote>
<ul class="simple">
<li><p>port: This defaults to 9092.</p></li>
<li><p>kafka-ack-level: No end2end acking is required. Messages may persist in the
broker before being delivered to their final destinations. Two ack methods
exist:</p></li>
</ul>
<blockquote>
<div><ul class="simple">
<li><p>“none”: Messages are considered “delivered” if sent to the broker.</p></li>
<li><p>“broker”: Messages are considered “delivered” if acked by the broker. (This
is the default.)</p></li>
</ul>
</div></blockquote>
<ul class="simple">
<li><p>kafka-brokers: A command-separated list of host:port of kafka brokers. These brokers (may contain a broker which is defined in kafka uri) will be added to kafka uri to support sending notifcations to a kafka cluster.</p></li>
</ul>
</div></blockquote>
<div class="admonition note">
<p class="admonition-title">Note</p>
<ul class="simple">
<li><p>The key-value pair of a specific parameter need not reside in the same
line as the parameter, and need not appear in any specific order, but it
must use the same index.</p></li>
<li><p>Attribute indexing need not be sequential and need not start from any
specific value.</p></li>
<li><p><a class="reference external" href="https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html">AWS Create Topic</a> provides a detailed explanation of the endpoint
attributes format. In our case, however, different keys and values are
used.</p></li>
</ul>
</div>
<p>The response has the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">CreateTopicResponse</span> <span class="n">xmlns</span><span class="o">=</span><span class="s2">&quot;https://sns.amazonaws.com/doc/2010-03-31/&quot;</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">CreateTopicResult</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">TopicArn</span><span class="o">&gt;&lt;/</span><span class="n">TopicArn</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">CreateTopicResult</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">CreateTopicResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>The topic <a class="reference external" href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">ARN</a>
in the response has the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">arn</span><span class="p">:</span><span class="n">aws</span><span class="p">:</span><span class="n">sns</span><span class="p">:</span><span class="o">&lt;</span><span class="n">zone</span><span class="o">-</span><span class="n">group</span><span class="o">&gt;</span><span class="p">:</span><span class="o">&lt;</span><span class="n">tenant</span><span class="o">&gt;</span><span class="p">:</span><span class="o">&lt;</span><span class="n">topic</span><span class="o">&gt;</span>
</pre></div>
</div>
</section>
<section id="get-topic-attributes">
<h4><a class="toc-backref" href="#id14" role="doc-backlink">Get Topic Attributes</a><a class="headerlink" href="#get-topic-attributes" title="Permalink to this heading"></a></h4>
<p>This returns information about a specific topic. This includes push-endpoint
information, if provided.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">GetTopicAttributes</span>
<span class="o">&amp;</span><span class="n">TopicArn</span><span class="o">=&lt;</span><span class="n">topic</span><span class="o">-</span><span class="n">arn</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>The response has the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">GetTopicAttributesResponse</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">GetTopicAttributesResult</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">Attributes</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">entry</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">key</span><span class="o">&gt;</span><span class="n">User</span><span class="o">&lt;/</span><span class="n">key</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">value</span><span class="o">&gt;&lt;/</span><span class="n">value</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">entry</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">entry</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">key</span><span class="o">&gt;</span><span class="n">Name</span><span class="o">&lt;/</span><span class="n">key</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">value</span><span class="o">&gt;&lt;/</span><span class="n">value</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">entry</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">entry</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">key</span><span class="o">&gt;</span><span class="n">EndPoint</span><span class="o">&lt;/</span><span class="n">key</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">value</span><span class="o">&gt;&lt;/</span><span class="n">value</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">entry</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">entry</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">key</span><span class="o">&gt;</span><span class="n">TopicArn</span><span class="o">&lt;/</span><span class="n">key</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">value</span><span class="o">&gt;&lt;/</span><span class="n">value</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">entry</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">entry</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">key</span><span class="o">&gt;</span><span class="n">OpaqueData</span><span class="o">&lt;/</span><span class="n">key</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">value</span><span class="o">&gt;&lt;/</span><span class="n">value</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">entry</span><span class="o">&gt;</span>
        <span class="o">&lt;/</span><span class="n">Attributes</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">GetTopicAttributesResult</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">GetTopicAttributesResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>User: the name of the user that created the topic.</p></li>
<li><p>Name: the name of the topic.</p></li>
<li><dl class="simple">
<dt>EndPoint: The JSON-formatted endpoint parameters, including:</dt><dd><ul>
<li><p>EndpointAddress: The push-endpoint URL.</p></li>
<li><p>EndpointArgs: The push-endpoint args.</p></li>
<li><p>EndpointTopic: The topic name to be sent to the endpoint (can be different
than the above topic name).</p></li>
<li><p>HasStoredSecret: This is “true” if the endpoint URL contains user/password
information. In this case, the request must be made over HTTPS. The “topic
get” request will otherwise be rejected.</p></li>
<li><p>Persistent: This is “true” if the topic is persistent.</p></li>
<li><p>TimeToLive: This will limit the time (in seconds) to retain the notifications.</p></li>
<li><p>MaxRetries: This will limit the max retries before expiring notifications.</p></li>
<li><p>RetrySleepDuration: This will control the frequency of retrying the notifications.</p></li>
</ul>
</dd>
</dl>
</li>
<li><p>TopicArn: topic <a class="reference external" href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">ARN</a>.</p></li>
<li><p>OpaqueData: The opaque data set on the topic.</p></li>
<li><p>Policy: Any access permission set on the topic.</p></li>
</ul>
</section>
<section id="get-topic-information">
<h4><a class="toc-backref" href="#id15" role="doc-backlink">Get Topic Information</a><a class="headerlink" href="#get-topic-information" title="Permalink to this heading"></a></h4>
<p>This returns information about a specific topic. This includes push-endpoint
information, if provided.  Note that this API is now deprecated in favor of the
AWS compliant <cite>GetTopicAttributes</cite> API.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">GetTopic</span>
<span class="o">&amp;</span><span class="n">TopicArn</span><span class="o">=&lt;</span><span class="n">topic</span><span class="o">-</span><span class="n">arn</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>The response has the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">GetTopicResponse</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">GetTopicResult</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">Topic</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">User</span><span class="o">&gt;&lt;/</span><span class="n">User</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">Name</span><span class="o">&gt;&lt;/</span><span class="n">Name</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">EndPoint</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">EndpointAddress</span><span class="o">&gt;&lt;/</span><span class="n">EndpointAddress</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">EndpointArgs</span><span class="o">&gt;&lt;/</span><span class="n">EndpointArgs</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">EndpointTopic</span><span class="o">&gt;&lt;/</span><span class="n">EndpointTopic</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">HasStoredSecret</span><span class="o">&gt;&lt;/</span><span class="n">HasStoredSecret</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">Persistent</span><span class="o">&gt;&lt;/</span><span class="n">Persistent</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">EndPoint</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">TopicArn</span><span class="o">&gt;&lt;/</span><span class="n">TopicArn</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">OpaqueData</span><span class="o">&gt;&lt;/</span><span class="n">OpaqueData</span><span class="o">&gt;</span>
        <span class="o">&lt;/</span><span class="n">Topic</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">GetTopicResult</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">GetTopicResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>User: The name of the user that created the topic.</p></li>
<li><p>Name: The name of the topic.</p></li>
<li><p>EndpointAddress: The push-endpoint URL.</p></li>
<li><p>EndpointArgs: The push-endpoint args.</p></li>
<li><p>EndpointTopic: The topic name to be sent to the endpoint (which can be
different than the above topic name).</p></li>
<li><p>HasStoredSecret: This is “true” if the endpoint URL contains user/password
information. In this case, the request must be made over HTTPS. The “topic
get” request will otherwise be rejected.</p></li>
<li><p>Persistent: “true” if topic is persistent.</p></li>
<li><p>TopicArn: topic <a class="reference external" href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">ARN</a>.</p></li>
<li><p>OpaqueData: the opaque data set on the topic.</p></li>
<li><p>Policy: Any access permission set on the topic.</p></li>
</ul>
</section>
<section id="delete-topic">
<h4><a class="toc-backref" href="#id16" role="doc-backlink">Delete Topic</a><a class="headerlink" href="#delete-topic" title="Permalink to this heading"></a></h4>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">DeleteTopic</span>
<span class="o">&amp;</span><span class="n">TopicArn</span><span class="o">=&lt;</span><span class="n">topic</span><span class="o">-</span><span class="n">arn</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>This deletes the specified topic.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<ul class="simple">
<li><p>Deleting an unknown notification (for example, double delete) is not
considered an error.</p></li>
<li><p>Deleting a topic does not automatically delete all notifications associated
with it.</p></li>
</ul>
</div>
<p>The response has the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">DeleteTopicResponse</span> <span class="n">xmlns</span><span class="o">=</span><span class="s2">&quot;https://sns.amazonaws.com/doc/2010-03-31/&quot;</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">DeleteTopicResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
</section>
<section id="list-topics">
<h4><a class="toc-backref" href="#id17" role="doc-backlink">List Topics</a><a class="headerlink" href="#list-topics" title="Permalink to this heading"></a></h4>
<p>List all topics associated with a tenant.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">ListTopics</span>
</pre></div>
</div>
<p>The response has the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">ListTopicsResponse</span> <span class="n">xmlns</span><span class="o">=</span><span class="s2">&quot;https://sns.amazonaws.com/doc/2010-03-31/&quot;</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ListTopicsResult</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">Topics</span><span class="o">&gt;</span>
            <span class="o">&lt;</span><span class="n">member</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">User</span><span class="o">&gt;&lt;/</span><span class="n">User</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">Name</span><span class="o">&gt;&lt;/</span><span class="n">Name</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">EndPoint</span><span class="o">&gt;</span>
                    <span class="o">&lt;</span><span class="n">EndpointAddress</span><span class="o">&gt;&lt;/</span><span class="n">EndpointAddress</span><span class="o">&gt;</span>
                    <span class="o">&lt;</span><span class="n">EndpointArgs</span><span class="o">&gt;&lt;/</span><span class="n">EndpointArgs</span><span class="o">&gt;</span>
                    <span class="o">&lt;</span><span class="n">EndpointTopic</span><span class="o">&gt;&lt;/</span><span class="n">EndpointTopic</span><span class="o">&gt;</span>
                <span class="o">&lt;/</span><span class="n">EndPoint</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">TopicArn</span><span class="o">&gt;&lt;/</span><span class="n">TopicArn</span><span class="o">&gt;</span>
                <span class="o">&lt;</span><span class="n">OpaqueData</span><span class="o">&gt;&lt;/</span><span class="n">OpaqueData</span><span class="o">&gt;</span>
            <span class="o">&lt;/</span><span class="n">member</span><span class="o">&gt;</span>
        <span class="o">&lt;/</span><span class="n">Topics</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ListTopicsResult</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">ListTopicsResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>If the endpoint URL contains user/password information in any part of the
topic, the request must be made over HTTPS. The “topic list” request will
otherwise be rejected.</p></li>
</ul>
</section>
<section id="set-topic-attributes">
<h4><a class="toc-backref" href="#id18" role="doc-backlink">Set Topic Attributes</a><a class="headerlink" href="#set-topic-attributes" title="Permalink to this heading"></a></h4>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">POST</span>

<span class="n">Action</span><span class="o">=</span><span class="n">SetTopicAttributes</span>
<span class="o">&amp;</span><span class="n">TopicArn</span><span class="o">=&lt;</span><span class="n">topic</span><span class="o">-</span><span class="n">arn</span><span class="o">&gt;&amp;</span><span class="n">AttributeName</span><span class="o">=&lt;</span><span class="n">attribute</span><span class="o">-</span><span class="n">name</span><span class="o">&gt;&amp;</span><span class="n">AttributeValue</span><span class="o">=&lt;</span><span class="n">attribute</span><span class="o">-</span><span class="n">value</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>This allows to set/modify existing attributes on the specified topic.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<ul class="simple">
<li><p>The AttributeName passed will either be updated or created (if not exist) with AttributeValue passed.</p></li>
<li><p>Any unsupported AttributeName passed will result in error 400.</p></li>
</ul>
</div>
<p>The response has the following format:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">SetTopicAttributesResponse</span> <span class="n">xmlns</span><span class="o">=</span><span class="s2">&quot;https://sns.amazonaws.com/doc/2010-03-31/&quot;</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
        <span class="o">&lt;</span><span class="n">RequestId</span><span class="o">&gt;&lt;/</span><span class="n">RequestId</span><span class="o">&gt;</span>
    <span class="o">&lt;/</span><span class="n">ResponseMetadata</span><span class="o">&gt;</span>
<span class="o">&lt;/</span><span class="n">SetTopicAttributesResponse</span><span class="o">&gt;</span>
</pre></div>
</div>
<p>Valid AttributeName that can be passed:</p>
<blockquote>
<div><ul class="simple">
<li><p>push-endpoint: This is the URI of an endpoint to send push notifications to.</p></li>
<li><p>OpaqueData: Opaque data is set in the topic configuration and added to all
notifications that are triggered by the topic.</p></li>
<li><p>persistent: This indicates whether notifications to this endpoint are
persistent (=asynchronous) or not persistent. (This is “false” by default.)</p></li>
<li><p>time_to_live: This will limit the time (in seconds) to retain the notifications.</p></li>
<li><p>max_retries: This will limit the max retries before expiring notifications.</p></li>
<li><p>retry_sleep_duration: This will control the frequency of retrying the notifications.</p></li>
<li><p>Policy: This will control who can access the topic other than owner of the topic.</p></li>
<li><p>verify-ssl: This indicates whether the server certificates must be validated by
the client. This is “true” by default.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">use-ssl</span></code>: If this is set to “true”, a secure connection is used to
connect to the broker. This is “false” by default.</p></li>
<li><p>cloudevents: This indicates whether the HTTP header should contain
attributes according to the <a class="reference external" href="https://github.com/cloudevents/spec/blob/main/cloudevents/adapters/aws-s3.md">S3 CloudEvents Spec</a>.</p></li>
<li><p>amqp-exchange: The exchanges must exist and must be able to route messages
based on topics.</p></li>
<li><p>amqp-ack-level: No end2end acknowledgement is required. Messages may persist in the
broker before being delivered to their final destinations.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">ca-location</span></code>: If this is provided and a secure connection is used, the
specified CA will be used instead of the default CA to authenticate the
broker.</p></li>
<li><p>mechanism: may be provided together with user/password (default: <code class="docutils literal notranslate"><span class="pre">PLAIN</span></code>).</p></li>
<li><p>kafka-ack-level: No end2end acknowledgement is required. Messages may persist in the
broker before being delivered to their final destinations.</p></li>
<li><p>kafka-brokers: Set endpoint with broker(s) as a comma-separated list of host or host:port (default port 9092).</p></li>
</ul>
</div></blockquote>
</section>
</section>
<section id="notifications">
<h3><a class="toc-backref" href="#id19" role="doc-backlink">Notifications</a><a class="headerlink" href="#notifications" title="Permalink to this heading"></a></h3>
<p>Detailed under: <a class="reference external" href="../s3/bucketops">Bucket Operations</a>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<ul class="simple">
<li><p>“Abort Multipart Upload” request does not emit a notification</p></li>
<li><p>Both “Initiate Multipart Upload” and “POST Object” requests will emit an <code class="docutils literal notranslate"><span class="pre">s3:ObjectCreated:Post</span></code> notification</p></li>
</ul>
</div>
</section>
<section id="events">
<h3><a class="toc-backref" href="#id20" role="doc-backlink">Events</a><a class="headerlink" href="#events" title="Permalink to this heading"></a></h3>
<p>Events are in JSON format (regardless of the actual endpoint), and are S3-compatible.
For example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="s2">&quot;Records&quot;</span><span class="p">:[</span>
    <span class="p">{</span>
        <span class="s2">&quot;eventVersion&quot;</span><span class="p">:</span><span class="s2">&quot;2.1&quot;</span><span class="p">,</span>
        <span class="s2">&quot;eventSource&quot;</span><span class="p">:</span><span class="s2">&quot;ceph:s3&quot;</span><span class="p">,</span>
        <span class="s2">&quot;awsRegion&quot;</span><span class="p">:</span><span class="s2">&quot;zonegroup1&quot;</span><span class="p">,</span>
        <span class="s2">&quot;eventTime&quot;</span><span class="p">:</span><span class="s2">&quot;2019-11-22T13:47:35.124724Z&quot;</span><span class="p">,</span>
        <span class="s2">&quot;eventName&quot;</span><span class="p">:</span><span class="s2">&quot;ObjectCreated:Put&quot;</span><span class="p">,</span>
        <span class="s2">&quot;userIdentity&quot;</span><span class="p">:{</span>
            <span class="s2">&quot;principalId&quot;</span><span class="p">:</span><span class="s2">&quot;tester&quot;</span>
        <span class="p">},</span>
        <span class="s2">&quot;requestParameters&quot;</span><span class="p">:{</span>
            <span class="s2">&quot;sourceIPAddress&quot;</span><span class="p">:</span><span class="s2">&quot;&quot;</span>
        <span class="p">},</span>
        <span class="s2">&quot;responseElements&quot;</span><span class="p">:{</span>
            <span class="s2">&quot;x-amz-request-id&quot;</span><span class="p">:</span><span class="s2">&quot;503a4c37-85eb-47cd-8681-2817e80b4281.5330.903595&quot;</span><span class="p">,</span>
            <span class="s2">&quot;x-amz-id-2&quot;</span><span class="p">:</span><span class="s2">&quot;14d2-zone1-zonegroup1&quot;</span>
        <span class="p">},</span>
        <span class="s2">&quot;s3&quot;</span><span class="p">:{</span>
            <span class="s2">&quot;s3SchemaVersion&quot;</span><span class="p">:</span><span class="s2">&quot;1.0&quot;</span><span class="p">,</span>
            <span class="s2">&quot;configurationId&quot;</span><span class="p">:</span><span class="s2">&quot;mynotif1&quot;</span><span class="p">,</span>
            <span class="s2">&quot;bucket&quot;</span><span class="p">:{</span>
                <span class="s2">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;mybucket1&quot;</span><span class="p">,</span>
                <span class="s2">&quot;ownerIdentity&quot;</span><span class="p">:{</span>
                    <span class="s2">&quot;principalId&quot;</span><span class="p">:</span><span class="s2">&quot;tester&quot;</span>
                <span class="p">},</span>
                <span class="s2">&quot;arn&quot;</span><span class="p">:</span><span class="s2">&quot;arn:aws:s3:zonegroup1::mybucket1&quot;</span><span class="p">,</span>
                <span class="s2">&quot;id&quot;</span><span class="p">:</span><span class="s2">&quot;503a4c37-85eb-47cd-8681-2817e80b4281.5332.38&quot;</span>
            <span class="p">},</span>
            <span class="s2">&quot;object&quot;</span><span class="p">:{</span>
                <span class="s2">&quot;key&quot;</span><span class="p">:</span><span class="s2">&quot;myimage1.jpg&quot;</span><span class="p">,</span>
                <span class="s2">&quot;size&quot;</span><span class="p">:</span><span class="s2">&quot;1024&quot;</span><span class="p">,</span>
                <span class="s2">&quot;eTag&quot;</span><span class="p">:</span><span class="s2">&quot;37b51d194a7513e45b56f6524f2d51f2&quot;</span><span class="p">,</span>
                <span class="s2">&quot;versionId&quot;</span><span class="p">:</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
                <span class="s2">&quot;sequencer&quot;</span><span class="p">:</span> <span class="s2">&quot;F7E6D75DC742D108&quot;</span><span class="p">,</span>
                <span class="s2">&quot;metadata&quot;</span><span class="p">:[],</span>
                <span class="s2">&quot;tags&quot;</span><span class="p">:[]</span>
            <span class="p">}</span>
        <span class="p">},</span>
        <span class="s2">&quot;eventId&quot;</span><span class="p">:</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
        <span class="s2">&quot;opaqueData&quot;</span><span class="p">:</span><span class="s2">&quot;me@example.com&quot;</span>
    <span class="p">}</span>
<span class="p">]}</span>
</pre></div>
</div>
<ul class="simple">
<li><p>awsRegion: The zonegroup.</p></li>
<li><p>eventTime: The timestamp, indicating when the event was triggered.</p></li>
<li><p>eventName: For the list of supported events see: <a class="reference external" href="../s3-notification-compatibility">S3 Notification
Compatibility</a>. Note that eventName values do not start with the <cite>s3:</cite>
prefix.</p></li>
<li><p>userIdentity.principalId: The user that triggered the change.</p></li>
<li><p>requestParameters.sourceIPAddress: not supported</p></li>
<li><p>responseElements.x-amz-request-id: The request ID of the original change.</p></li>
<li><p>responseElements.x_amz_id_2: The RGW on which the change was made.</p></li>
<li><p>s3.configurationId: The notification ID that created the event.</p></li>
<li><p>s3.bucket.name: The name of the bucket.</p></li>
<li><p>s3.bucket.ownerIdentity.principalId: The owner of the bucket.</p></li>
<li><p>s3.bucket.arn: The ARN of the bucket.</p></li>
<li><p>s3.bucket.id: The ID of the bucket. (This is an extension to the S3
notification API.)</p></li>
<li><p>s3.object.key: The object key.</p></li>
<li><p>s3.object.size: The object size.</p></li>
<li><p>s3.object.eTag: The object etag.</p></li>
<li><p>s3.object.versionId: The object version, if the bucket is versioned. When a
copy is made, it includes the version of the target object. When a delete
marker is created, it includes the version of the delete marker.</p></li>
<li><p>s3.object.sequencer: The monotonically-increasing identifier of the “change
per object” (hexadecimal format).</p></li>
<li><p>s3.object.metadata: Any metadata set on the object that is sent as
<code class="docutils literal notranslate"><span class="pre">x-amz-meta-</span></code> (that is, any metadata set on the object that is sent as an
extension to the S3 notification API).</p></li>
<li><p>s3.object.tags: Any tags set on the object. (This is an extension to the S3
notification API.)</p></li>
<li><p>s3.eventId: The unique ID of the event, which could be used for acking. (This
is an extension to the S3 notification API.)</p></li>
<li><p>s3.opaqueData: This means that “opaque data” is set in the topic configuration
and is added to all notifications triggered by the topic. (This is an
extension to the S3 notification API.)</p></li>
</ul>
</section>
</section>
</section>



<div id="support-the-ceph-foundation" class="admonition note">
  <p class="first admonition-title">Brought to you by the Ceph Foundation</p>
  <p class="last">The Ceph Documentation is a community resource funded and hosted by the non-profit <a href="https://ceph.io/en/foundation/">Ceph Foundation</a>. If you would like to support this and our other efforts, please consider <a href="https://ceph.io/en/foundation/join/">joining now</a>.</p>
</div>


           </div>
           
          </div>
          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
        <a href="../archive-sync-module/" class="btn btn-neutral float-left" title="Archive 同步模块" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
        <a href="../s3-notification-compatibility/" class="btn btn-neutral float-right" title="S3 桶通知的兼容性" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
    </div>

  <hr/>

  <div role="contentinfo">
    <p>&#169; Copyright 2016, Ceph authors and contributors. Licensed under Creative Commons Attribution Share Alike 3.0 (CC-BY-SA-3.0).</p>
  </div>

   

</footer>
        </div>
      </div>

    </section>

  </div>
  

  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script>

  
  
    
   

</body>
</html>